// main.js

// Modules to control application life and create native browser window
const { app, BrowserWindow, session } = require('electron')
const path = require('node:path')

/**
 * 创建窗口
 */
async function createWindow() {
  // Create the browser window.
  const mainWindow = new BrowserWindow({
    width: 1024,
    height: 768,
    webPreferences: {
      // preload: path.join(__dirname, 'preload.js'),
      preload: path.join(app.getAppPath(), 'browser.js'),
      // 非 preload
      // contextIsolation: false,
      // nodeIntegration: true,
      // nodeIntegrationInWorker: true,
      // enableRemoteModule: true, // 出于安全考虑，应尽量避免使用
      // allowRunningInsecureContent: true,
      // experimentalFeatures: true, // 开启实验性功能
      // sandbox: false, // 禁止沙盒
      // webSecurity: false, // 安全
      webviewTag: true, // 明确启用webview
    }
  })

  // 使用 session 实例的 setProxy 方法来为当前页面设置代理
  // let result = await mainWindow.webContents.session.setProxy({
  //   proxyRules: 'socks5://192.168.12.7:1080'
  // });

  // and load the index.html of the app.
  mainWindow.loadFile('index.html')

  // 加载 Vue 应用构建的 index.html
  // mainWindow.loadFile(path.join(__dirname, 'build/index.html'));
  // mainWindow.loadFile('browser.html')

  // 普通网站
  // mainWindow.loadURL('https://beijingit.cn/')
  // 国密通讯 单向认证：通信过程中客户端仅需要验证服务端的身份信息
  // mainWindow.loadURL('https://sm2only.ovssl.cn/')

  // Open the DevTools.
  mainWindow.webContents.openDevTools()

  // 事件触发 最大化窗口
  mainWindow.maximize();
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.whenReady().then(() => {
  createWindow()

  app.on('activate', function () {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) {
      createWindow()
    }
  })
})

// Quit when all windows are closed, except on macOS. There, it's common
// for applications and their menu bar to stay active until the user quits
// explicitly with Cmd + Q.
app.on('window-all-closed', function () {
  // if (process.platform !== 'darwin')
  {
    app.quit()
  }
})

// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.

// 给整个应用程序设置代理
app.commandLine.appendSwitch('proxy-server', 'socks5://192.168.12.7:1080');

// 操作系统层面安装
// Windows：通过“运行”输入mmc.exe打开“Microsoft 管理控制台”，然后添加“证书（本地计算机）”的证书存储区，将证书导入到“受信任的根证书颁发机构”中。
// macOS：使用“钥匙串访问”应用，将证书拖动到“系统”钥匙串中的“证书”类别下，并设置为“始终信任”。
// Linux：具体步骤取决于使用的Linux发行版，但通常可以通过图形界面（如GNOME的“密码和密钥”）或命令行工具（如certutil）来管理证书。

// 忽略证书错误
app.commandLine.appendSwitch('--ignore-certificate-errors', 'true');
// 监听证书错误事件
// app.on('certificate-error', (event, webContents, url, error, certificate, callback) => {
//   // 检查URL或证书信息，决定是否信任
//   if (url.startsWith('https://sm2only.ovssl.cn')) {
//     event.preventDefault(); // 阻止默认的错误处理
//     callback(true); // 信任证书
//   } else {
//     callback(false); // 不信任证书
//   }
// });
